package cn.edu.hitwh.kanlema.controller;


import cn.edu.hitwh.kanlema.constant.RedisConstants;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cn.edu.hitwh.kanlema.dto.Result;
import cn.edu.hitwh.kanlema.entity.Cinema;
import cn.edu.hitwh.kanlema.service.ICinemaService;
import cn.edu.hitwh.kanlema.constant.SystemConstants;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author vvcoder
 * @since 2025-8-18
 */
@RestController
@RequestMapping("/cinema")
public class CinemaController {

    @Resource
    public ICinemaService cinemaService;

    /**
     * 根据id查询影院信息
     * @param id 影院id
     * @return 影院详情数据
     */
    @GetMapping("/{id}")
    @ApiOperation("根据id查询影院信息")
    public Result queryCinemaById(@PathVariable("id") Long id) {
        return Result.ok(cinemaService.getCinemaById(id));
    }

    @GetMapping("/{id}/is-hot")
    @ApiOperation("判断影院是否热门")
    public Result isCinemaHot(@PathVariable("id") Long id) {
        return Result.ok(cinemaService.isCinemaHot(id));
    }

    @PutMapping("/{id}/hot/{isHot}")
    @ApiOperation("设置影院为热门")
    public Result setCinemaHot(@PathVariable("id") Long id, @PathVariable("isHot") Boolean isHot) {
        // 写入缓存
        cinemaService.setCinemaHot(id, isHot);
        return Result.ok();
    }

    /**
     * 新增影院信息
     * @param cinema 影院数据
     * @return 影院id
     */
    @PostMapping
    @ApiOperation("新增影院信息")
    public Result saveCinema(@RequestBody Cinema cinema) {
        // 写入数据库
        cinemaService.saveCinema(cinema);
        // 返回店铺id
        return Result.ok(cinema.getId());
    }

    /**
     * 更新影院信息
     * @param cinema 影院数据
     * @return 无
     */
    @PutMapping
    @ApiOperation("更新影院信息")
    public Result updateCinema(@RequestBody Cinema cinema) {
        // 写入数据库
        cinemaService.updateCinemaById(cinema);
        return Result.ok();
    }

    /**
     * 根据影院类型分页查询影院信息
     * @param typeId 影院类型
     * @param current 页码
     * @return 影院列表
     */
    @GetMapping("/of/type")
    @ApiOperation("根据影院类型分页查询影院信息")
    public Result queryCinemaByType(
            @RequestParam("typeId") Integer typeId,
            @RequestParam(value = "current", defaultValue = "1") Integer current
    ) {
        // 根据类型分页查询
        Page<Cinema> page = cinemaService.query()
                .eq("type_id", typeId)
                .page(new Page<>(current, SystemConstants.DEFAULT_PAGE_SIZE));
        // 返回数据
        return Result.ok(page.getRecords());
    }

    /**
     * 根据影院名称关键字分页查询影院信息
     * @param name 影院名称关键字
     * @param current 页码
     * @return 影院列表
     */
    @GetMapping("/of/name")
    @ApiOperation("根据影院名称关键字分页查询影院信息")
    public Result queryCinemaByName(
            @RequestParam(value = "name", required = false) String name,
            @RequestParam(value = "current", defaultValue = "1") Integer current
    ) {
        // 根据类型分页查询
        Page<Cinema> page = cinemaService.query()
                .like(StrUtil.isNotBlank(name), "name", name)
                .page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE));
        // 返回数据
        return Result.ok(page.getRecords());
    }
}
